home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / CMStateSet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  1.9 KB  |  168 lines

  1. package com.ibm.xml.internal;
  2.  
  3. class CMStateSet {
  4.    int fBitCount;
  5.    int fByteCount;
  6.    int fBits1;
  7.    int fBits2;
  8.    byte[] fByteArray;
  9.  
  10.    CMStateSet(int var1) throws CMException {
  11.       this.fBitCount = var1;
  12.       if (this.fBitCount < 0) {
  13.          throw new CMException(156);
  14.       } else {
  15.          if (this.fBitCount > 64) {
  16.             this.fByteCount = this.fBitCount / 8;
  17.             if (this.fBitCount % 8 != 0) {
  18.                ++this.fByteCount;
  19.             }
  20.  
  21.             this.fByteArray = new byte[this.fByteCount];
  22.          }
  23.  
  24.          this.zeroBits();
  25.       }
  26.    }
  27.  
  28.    public String toString() {
  29.       StringBuffer var1 = new StringBuffer();
  30.  
  31.       try {
  32.          var1.append("{");
  33.  
  34.          for(int var2 = 0; var2 < this.fBitCount; ++var2) {
  35.             if (this.getBit(var2)) {
  36.                var1.append(" " + var2);
  37.             }
  38.          }
  39.  
  40.          var1.append(" }");
  41.       } catch (CMException var3) {
  42.       }
  43.  
  44.       return var1.toString();
  45.    }
  46.  
  47.    final void intersection(CMStateSet var1) {
  48.       if (this.fBitCount < 65) {
  49.          this.fBits1 &= var1.fBits1;
  50.          this.fBits2 &= var1.fBits2;
  51.       } else {
  52.          for(int var2 = this.fByteCount - 1; var2 >= 0; --var2) {
  53.             byte[] var10000 = this.fByteArray;
  54.             var10000[var2] &= var1.fByteArray[var2];
  55.          }
  56.  
  57.       }
  58.    }
  59.  
  60.    final boolean getBit(int var1) throws CMException {
  61.       if (var1 >= this.fBitCount) {
  62.          throw new CMException(156);
  63.       } else if (this.fBitCount < 65) {
  64.          int var4 = 1 << var1 % 32;
  65.          if (var1 < 32) {
  66.             return (this.fBits1 & var4) != 0;
  67.          } else {
  68.             return (this.fBits2 & var4) != 0;
  69.          }
  70.       } else {
  71.          byte var2 = (byte)(1 << var1 % 8);
  72.          int var3 = var1 >> 3;
  73.          return (this.fByteArray[var3] & var2) != 0;
  74.       }
  75.    }
  76.  
  77.    final boolean isEmpty() {
  78.       if (this.fBitCount < 65) {
  79.          return this.fBits1 == 0 && this.fBits2 == 0;
  80.       } else {
  81.          for(int var1 = this.fByteCount - 1; var1 >= 0; --var1) {
  82.             if (this.fByteArray[var1] != 0) {
  83.                return false;
  84.             }
  85.          }
  86.  
  87.          return true;
  88.       }
  89.    }
  90.  
  91.    final boolean isSameSet(CMStateSet var1) {
  92.       if (this.fBitCount != var1.fBitCount) {
  93.          return false;
  94.       } else if (this.fBitCount < 65) {
  95.          return this.fBits1 == var1.fBits1 && this.fBits2 == var1.fBits2;
  96.       } else {
  97.          for(int var2 = this.fByteCount - 1; var2 >= 0; --var2) {
  98.             if (this.fByteArray[var2] != var1.fByteArray[var2]) {
  99.                return false;
  100.             }
  101.          }
  102.  
  103.          return true;
  104.       }
  105.    }
  106.  
  107.    final void union(CMStateSet var1) {
  108.       if (this.fBitCount < 65) {
  109.          this.fBits1 |= var1.fBits1;
  110.          this.fBits2 |= var1.fBits2;
  111.       } else {
  112.          for(int var2 = this.fByteCount - 1; var2 >= 0; --var2) {
  113.             byte[] var10000 = this.fByteArray;
  114.             var10000[var2] |= var1.fByteArray[var2];
  115.          }
  116.  
  117.       }
  118.    }
  119.  
  120.    final void setBit(int var1) throws CMException {
  121.       if (var1 >= this.fBitCount) {
  122.          throw new CMException(156);
  123.       } else if (this.fBitCount < 65) {
  124.          int var4 = 1 << var1 % 32;
  125.          if (var1 < 32) {
  126.             this.fBits1 &= ~var4;
  127.             this.fBits1 |= var4;
  128.          } else {
  129.             this.fBits2 &= ~var4;
  130.             this.fBits2 |= var4;
  131.          }
  132.       } else {
  133.          byte var2 = (byte)(1 << var1 % 8);
  134.          int var3 = var1 >> 3;
  135.          byte[] var10000 = this.fByteArray;
  136.          var10000[var3] = (byte)(var10000[var3] & ~var2);
  137.          var10000 = this.fByteArray;
  138.          var10000[var3] |= var2;
  139.       }
  140.    }
  141.  
  142.    final void setTo(CMStateSet var1) throws CMException {
  143.       if (this.fBitCount != var1.fBitCount) {
  144.          throw new CMException(156);
  145.       } else if (this.fBitCount < 65) {
  146.          this.fBits1 = var1.fBits1;
  147.          this.fBits2 = var1.fBits2;
  148.       } else {
  149.          for(int var2 = this.fByteCount - 1; var2 >= 0; --var2) {
  150.             this.fByteArray[var2] = var1.fByteArray[var2];
  151.          }
  152.  
  153.       }
  154.    }
  155.  
  156.    final void zeroBits() {
  157.       if (this.fBitCount < 65) {
  158.          this.fBits1 = 0;
  159.          this.fBits2 = 0;
  160.       } else {
  161.          for(int var1 = this.fByteCount - 1; var1 >= 0; --var1) {
  162.             this.fByteArray[var1] = 0;
  163.          }
  164.  
  165.       }
  166.    }
  167. }
  168.